//
// Created by 史振江 on 8/3/23.
//

#ifndef SPUSHRTMP_SAUDIOCHANNEL_H
#define SPUSHRTMP_SAUDIOCHANNEL_H

#include <faac.h>
#include <sys/types.h>
#include <jni.h>
#include "libfaac/frame.h"
#include "defind-util.h"
#include <rtmp.h>
#include <cstring>
#include <pthread.h>

namespace {
    typedef void (*AudioCallback)(RTMPPacket *);
}

class SAudioChannel {
private:

    pthread_mutex_t mutex;// 互斥锁
    u_long inputSamples = 0; // faac输出的样本数
    u_long maxOutputBytes = 0; // faac 编码器 最大能输出的字节数
    int mChannels; // 通道数
    faacEncHandle audioEncoder = 0; // 音频编码器
    u_char *buffer = 0; // 后面要用到的 缓冲区
    AudioCallback audioCallback;

public:
    SAudioChannel();
    void initFaacEncoder(int channel, int sampleRate);

    // 获取样本数
    int getInputSample() const;

    void setAudioCallback(AudioCallback);

    void encodeData(int8_t *data);

    ~SAudioChannel();

    void getSequenceHeader();
};


#endif //SPUSHRTMP_SAUDIOCHANNEL_H
